package br.com.werp.regras.tesouraria.visao.decorador;

import java.util.HashMap;
import java.util.Map;

import org.displaytag.decorator.TableDecorator;

import br.com.werp.regras.geral.Debuger;
import br.com.werp.regras.geral.ErroPadrao;
import br.com.werp.regras.geral.FabricaSubSistema;
import br.com.werp.regras.geral.GerenciamentoDocumento;
import br.com.werp.regras.geral.helpers.PessoaHelper;
import br.com.werp.regras.geral.util.Constantes;
import br.com.werp.regras.geral.util.FormatDate;
import br.com.werp.regras.geral.util.Html;
import br.com.werp.regras.geral.util.Util;
import br.com.werp.regras.geral.vos.documento.DocumentoFinanceiroVO;
import br.com.werp.regras.geral.vos.documento.DocumentoPagamentoVO;
import br.com.werp.regras.geral.vos.documento.DocumentoVencimentoPesquisaVO;
import br.com.werp.regras.geral.vos.documento.DocumentoVencimentoVO;
import br.com.werp.regras.geral.vos.tabelas.Pessoa;
import br.com.werp.regras.tesouraria.controle.ControleVencimentos;


/**
 * @author Sobreira
 * Criado em 02/02/2005
 *
 */
public class Pagamentos extends TableDecorator {
    private ControleVencimentos controleVencimentos = new ControleVencimentos();

    public String getModificador() {
        DocumentoPagamentoVO pagamentoVO =
            (DocumentoPagamentoVO) getCurrentRowObject();
        //TODO DISPLAY TAG MODIFICADOR
//        DocumentoAcrescimoDescontoVO adVO =
//            pagamentoVO.getDocumentoAcrescimoDescontoVO();
//        String desconto =
//            (adVO == null) ? "" : String.valueOf(adVO.getAcdc_valor());
//
//        boolean leitura = true;
//
//        return Html.center(Html.inputType("text", 20, 250, "modificador",
//                pagamentoVO.getId(), "baseField", String.valueOf(desconto),
//                leitura));
        return "DISPLAYTAG MODIFICADOR";
    }

    public String getValor() {
        DocumentoPagamentoVO pagamentoVO =
            (DocumentoPagamentoVO) getCurrentRowObject();

        boolean leitura = true;

        return Html.center(Html.inputType("text", 20, 250, "valor",
                pagamentoVO.getId(), "baseField",
                String.valueOf(pagamentoVO.getDcpg_valor()), leitura));
    }

    public String getValor_pago() {
        DocumentoPagamentoVO pagamentoVO =
            (DocumentoPagamentoVO) getCurrentRowObject();
        DocumentoVencimentoVO vencimentoVO =
            pagamentoVO.getDocumentoVencimentoVO();

        try {
            controleVencimentos.verificarVencimentoPagos(vencimentoVO);
        } catch (ErroPadrao e) {
            Debuger.debugar(e, getClass());
        }

        return "R$" + vencimentoVO.getValor_pago();
    }

    public String getValor_pagar() {
        DocumentoPagamentoVO pagamentoVO =
            (DocumentoPagamentoVO) getCurrentRowObject();
        DocumentoVencimentoVO vencimentoVO =
            pagamentoVO.getDocumentoVencimentoVO();

        try {
            controleVencimentos.verificarVencimentoPagos(vencimentoVO);
        } catch (ErroPadrao e) {
            Debuger.debugar(e, getClass());
        }

        return "R$" +
        (vencimentoVO.getDcve_valor() - vencimentoVO.getValor_pago());
    }

    public String getNumero() {
        DocumentoPagamentoVO pagamentoVO =
            (DocumentoPagamentoVO) getCurrentRowObject();
        DocumentoVencimentoVO vencimentoVO =
            pagamentoVO.getDocumentoVencimentoVO();

        String retorno = "";
        int docm_id = 0;

        try {
            if (vencimentoVO instanceof DocumentoVencimentoPesquisaVO) {
                DocumentoVencimentoPesquisaVO docVencPescVO =
                    (DocumentoVencimentoPesquisaVO) vencimentoVO;
                GerenciamentoDocumento gerDoc =
                    FabricaSubSistema.getGerenciamentoDocumento();
                docm_id = gerDoc.obeterDocumentoRaiz(docVencPescVO.getApdo_doc_agrupador());

                DocumentoFinanceiroVO documentoFinanceiroVO =
                    new DocumentoFinanceiroVO();
                documentoFinanceiroVO.setDocm_id(docm_id);
                documentoFinanceiroVO = (DocumentoFinanceiroVO) Util.get0(gerDoc.obeterDocumentoFinanceiroVO(
                            documentoFinanceiroVO));
                retorno = documentoFinanceiroVO.getDcfi_numero_emissor();
            }
        } catch (Exception e) {
            Debuger.debugar(e, getClass());
        }

        Map map = new HashMap();
        map.put("docIdBanco", new Integer(docm_id));
        map.put("carregar_action", "");

        return Html.href("../Documentos/DocumentoFinanceiroForm.do", map,
            "_BLANK", retorno) + retorno + "</a>";
    }

    public String getPessoa() {
        DocumentoPagamentoVO pagamentoVO =
            (DocumentoPagamentoVO) getCurrentRowObject();
        DocumentoVencimentoVO vencimentoVO =
            pagamentoVO.getDocumentoVencimentoVO();
        String retorno = "";

        try {
            Pessoa pessoa =
                PessoaHelper.obterPessoa(vencimentoVO.getDocm_pessoa());
            retorno = pessoa.getPess_nome();
        } catch (Exception e) {
            Debuger.debugar(e, getClass());
        }

        return retorno;
    }

    public String getId() {
        DocumentoPagamentoVO pagamentoVO =
            (DocumentoPagamentoVO) getCurrentRowObject();

        return "<input type=\"checkbox\" name=\"pagamentos\" " +
        "Class=\"baseField\" " + "value=\"" + pagamentoVO.getDocm_id() + "\">";
    }

    public String getDcve_data() {
        DocumentoPagamentoVO pagamentoVO =
            (DocumentoPagamentoVO) getCurrentRowObject();
        DocumentoVencimentoVO vencimentoVO =
            pagamentoVO.getDocumentoVencimentoVO();

        return FormatDate.format(vencimentoVO.getDcve_data(),
            Constantes.DATA_FORMATO);
    }

    public String getDcve_valor() {
        DocumentoPagamentoVO pagamentoVO =
            (DocumentoPagamentoVO) getCurrentRowObject();
        DocumentoVencimentoVO vencimentoVO =
            pagamentoVO.getDocumentoVencimentoVO();

        return "R$" + vencimentoVO.getDcve_valor();
    }
}
